誤差逆行性伝播(Back Propagation)
https://youtu.be/0itH0iDO8BE?si=PEJZ7Kufm1orRJCj
出力と教師データを比較して、その誤差を最小化するように素子間の重みを変更する
出力層から入力層へ順番に重みを更新していくため、逆伝播
Naa_tsure.icon入力側から重みを更新すると、それ以降の出力が変化してしまうので逆から更新
各素子内での計算
$ u^l_j =w_{0j}^l + w_{1j}^lz_{1}^{l-1} + w_{2j}^lz_{2}^{l-1} + ...
$ z^l_j=f^l(u_j^l)
重みの更新
$ \Delta w_{ij}^l = -\epsilon \frac{\partial E}{\partial w_{ij}^l}
連鎖率
1変数
$ y=f(u)
$ u=g(x)
$ \frac{dy}{dx}=\frac{dy}{du}\frac{du}{dx}
2変数
$ z=f(u,v)
$ u=g(x,y)
$ v=h(x,y)
$ \frac{\partial z}{\partial x} = \frac{\partial z}{\partial u}\frac{\partial u}{\partial x} + \frac{\partial z}{\partial v}\frac{\partial v}{\partial x}
多変数
$ z=f(u_1,u_2,u_3...)
$ u_1=g_1(x_1,x_2,x_3...)
$ \frac{\partial z}{\partial x_k} = \frac{\partial z}{\partial u_1}\frac{\partial u_1}{\partial x_k} + \frac{\partial z}{\partial u_2}\frac{\partial u_2}{\partial x_k}+...=\sum_i\frac{\partial z}{\partial u_i}\frac{\partial u_i}{\partial x_k}
Naa_tsure.iconxのうちの1つを変化させると、それ以降の全てのuが変化するので全ての変化を加えることとなる
Naa_tsure.icon変化しなければ偏微分が0になるだけ
誤差
今回は二乗誤差関数を使用
$ E=\frac{1}{2}\sum_i(y_i-d_i)^2
$ z=f^l(u)=u
出力層における重みの更新
$ \frac{\partial E}{\partial w_{ij}^L}= \frac{\partial E}{\partial u_{j}^L} \frac{\partial u_j^L}{\partial w_{ij}^L}=\delta_j^Lz_i^{L-1}
特定の重みを少し変化させたときに、出力と教師データの差がどう変化するか
Naa_tsure.icon変形が飛んでるように見えるけど、
前半: $ \delta_j^L= \frac{\partial E}{\partial u_{ij}^L}(置きなおしただけ)
これが誤差と呼ばれる
後半: $ u_j^L= w_{1j}^Lz_1^{L-1}+...+w_{ij}^Lz_i^{L-1} + ...
これを$ w_{ij}で偏微分すると、その他の重みが掛かっている項は全て0になって$ z_i^{L-1}しか残らない
$ \delta_j^L= \frac{\partial E}{\partial u_{j}^L}=\frac{\partial E}{\partial z_j^L}\frac{\partial z_j^L}{\partial u_{j}^L}=y_j-d_j
Naa_tsure.icon誤差そのもの
ただ、今回は恒等関数なのでとても綺麗になったことに注意
まとめると、出力層における偏微分は以下のようになる
$ \frac{\partial E}{\partial w_{ij}^L}=(y_j-d_j)z_i^{L-1}
中間層
出力層は教師データとの比較だったので実質1変数みたいな偏微分だったが、中間層では多変数になる
$ \frac{\partial E}{\partial w_{ij}^l}= \frac{\partial E}{\partial u_{j}^l} \frac{\partial u_j^l}{\partial w_{ij}^l}=\delta_j^lz_i^{l-1}
$ \delta_j^l= \frac{\partial E}{\partial u_{j}^l}=\sum _k\frac{\partial E}{\partial u_k^{l+1}}\frac{\partial u_k^{l+1}}{\partial u_{j}^l}=\sum _k\delta_k^{l+1}\frac{\partial u_k^{l+1}}{\partial z_{j}^l}\frac{\partial z_j^{l}}{\partial u_{j}^l}
$ \delta_j^lは$ \delta_j^{l+1}から計算できる
つまりこういうこと
$ \delta_j^{L}→$ \delta_j^{L-1}→$ \delta_j^{L-2}→ ... →$ \delta_j^{2}→$ \delta_j^{1}
ここ、計算式が気合で全部書いてあってとてもよい